package lxs.swift.verify.getters;

import java.util.function.Predicate;

public interface StrGet<T> extends Get<T, String> {
    default Predicate<T> startsWith(String prefix) {
        return (t) -> {
            String s = this.get(t);
            return s.startsWith(prefix);
        };
    }

    default Predicate<T> endsWith(String suffix) {
        return (t) -> {
            String s = this.get(t);
            return s.endsWith(suffix);
        };
    }

    default Predicate<T> wrapWith(String prefix, String suffix) {
        return (t) -> {
            String s = this.get(t);
            return s.startsWith(prefix) && s.endsWith(suffix);
        };
    }

    default Predicate<T> equalsIgnoreCase(String str) {
        return (t) -> {
            String s = this.get(t);
            return s.equalsIgnoreCase(str);
        };
    }

    default Predicate<T> matches(String regex) {
        return (t) -> {
            String s = this.get(t);
            return s.matches(regex);
        };
    }

    default Predicate<T> contains(CharSequence str) {
        return (t) -> {
            String s = this.get(t);
            return s.contains(str);
        };
    }
}
